<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><link rel="stylesheet" type="text/css" href="style.css" /><script type="text/javascript" src="highlight.js"></script></head><body><pre><span class="hs-comment">-- | Evaluation of 64 bit values on 32 bit platforms.</span><span>
</span><span id="line-2"></span><span class="hs-keyword">module</span><span> </span><span class="hs-identifier">GHC.CmmToAsm.SPARC.CodeGen.Gen64</span><span> </span><span class="hs-special">(</span><span>
</span><span id="line-3"></span><span>        </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen64.html#assignMem_I64Code"><span class="hs-identifier">assignMem_I64Code</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-4"></span><span>        </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen64.html#assignReg_I64Code"><span class="hs-identifier">assignReg_I64Code</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-5"></span><span>        </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen64.html#iselExpr64"><span class="hs-identifier">iselExpr64</span></a></span><span>
</span><span id="line-6"></span><span class="hs-special">)</span><span>
</span><span id="line-7"></span><span>
</span><span id="line-8"></span><span class="hs-keyword">where</span><span>
</span><span id="line-9"></span><span>
</span><span id="line-10"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Prelude.html"><span class="hs-identifier">GHC.Prelude</span></a></span><span>
</span><span id="line-11"></span><span>
</span><span id="line-12"></span><span class="hs-keyword">import</span><span> </span><span class="hs-pragma">{-# SOURCE</span><span> </span><span class="hs-pragma">#-}</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html"><span class="hs-identifier">GHC.CmmToAsm.SPARC.CodeGen.Gen32</span></a></span><span>
</span><span id="line-13"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html"><span class="hs-identifier">GHC.CmmToAsm.SPARC.CodeGen.Base</span></a></span><span>
</span><span id="line-14"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Amode.html"><span class="hs-identifier">GHC.CmmToAsm.SPARC.CodeGen.Amode</span></a></span><span>
</span><span id="line-15"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.Regs.html"><span class="hs-identifier">GHC.CmmToAsm.SPARC.Regs</span></a></span><span>
</span><span id="line-16"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.AddrMode.html"><span class="hs-identifier">GHC.CmmToAsm.SPARC.AddrMode</span></a></span><span>
</span><span id="line-17"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.Imm.html"><span class="hs-identifier">GHC.CmmToAsm.SPARC.Imm</span></a></span><span>
</span><span id="line-18"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.Instr.html"><span class="hs-identifier">GHC.CmmToAsm.SPARC.Instr</span></a></span><span>
</span><span id="line-19"></span><span class="hs-comment">-- GHC.CmmToAsm.SPARC.Ppr()</span><span>
</span><span id="line-20"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Monad.html"><span class="hs-identifier">GHC.CmmToAsm.Monad</span></a></span><span>
</span><span id="line-21"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Instr.html"><span class="hs-identifier">GHC.CmmToAsm.Instr</span></a></span><span>
</span><span id="line-22"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Format.html"><span class="hs-identifier">GHC.CmmToAsm.Format</span></a></span><span>
</span><span id="line-23"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Platform.Reg.html"><span class="hs-identifier">GHC.Platform.Reg</span></a></span><span>
</span><span id="line-24"></span><span>
</span><span id="line-25"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Cmm.html"><span class="hs-identifier">GHC.Cmm</span></a></span><span>
</span><span id="line-26"></span><span>
</span><span id="line-27"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Data.OrdList.html"><span class="hs-identifier">GHC.Data.OrdList</span></a></span><span>
</span><span id="line-28"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Utils.Outputable.html"><span class="hs-identifier">GHC.Utils.Outputable</span></a></span><span>
</span><span id="line-29"></span><span>
</span><span id="line-30"></span><span class="hs-comment">-- | Code to assign a 64 bit value to memory.</span><span>
</span><span id="line-31"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen64.html#assignMem_I64Code"><span class="hs-identifier hs-type">assignMem_I64Code</span></a></span><span>
</span><span id="line-32"></span><span>        </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span>              </span><span class="hs-comment">-- ^ expr producing the destination address</span><span>
</span><span id="line-33"></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span>              </span><span class="hs-comment">-- ^ expr producing the source value.</span><span>
</span><span id="line-34"></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Monad.html#NatM"><span class="hs-identifier hs-type">NatM</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#InstrBlock"><span class="hs-identifier hs-type">InstrBlock</span></a></span><span>
</span><span id="line-35"></span><span>
</span><span id="line-36"></span><span id="assignMem_I64Code"><span class="annot"><span class="annottext">assignMem_I64Code :: CmmExpr -&gt; CmmExpr -&gt; NatM InstrBlock
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen64.html#assignMem_I64Code"><span class="hs-identifier hs-var hs-var">assignMem_I64Code</span></a></span></span><span> </span><span id="local-6989586621681034275"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681034275"><span class="hs-identifier hs-var">addrTree</span></a></span></span><span> </span><span id="local-6989586621681034274"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681034274"><span class="hs-identifier hs-var">valueTree</span></a></span></span><span>
</span><span id="line-37"></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-38"></span><span>     </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#ChildCode64"><span class="hs-identifier hs-type">ChildCode64</span></a></span><span> </span><span id="local-6989586621681034272"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681034272"><span class="hs-identifier hs-var">vcode</span></a></span></span><span> </span><span id="local-6989586621681034271"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034271"><span class="hs-identifier hs-var">rlo</span></a></span></span><span>      </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM ChildCode64
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen64.html#iselExpr64"><span class="hs-identifier hs-var">iselExpr64</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681034274"><span class="hs-identifier hs-var">valueTree</span></a></span><span>
</span><span id="line-39"></span><span>
</span><span id="line-40"></span><span>     </span><span class="hs-special">(</span><span id="local-6989586621681034270"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034270"><span class="hs-identifier hs-var">src</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681034269"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681034269"><span class="hs-identifier hs-var">acode</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM (Reg, InstrBlock)
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getSomeReg"><span class="hs-identifier hs-var">getSomeReg</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681034275"><span class="hs-identifier hs-var">addrTree</span></a></span><span>
</span><span id="line-41"></span><span>     </span><span class="hs-keyword">let</span><span>
</span><span id="line-42"></span><span>         </span><span id="local-6989586621681034267"><span class="annot"><span class="annottext">rhi :: Reg
</span><a href="#local-6989586621681034267"><span class="hs-identifier hs-var hs-var">rhi</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Reg -&gt; Reg
</span><a href="GHC.Platform.Reg.html#getHiVRegFromLo"><span class="hs-identifier hs-var">getHiVRegFromLo</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034271"><span class="hs-identifier hs-var">rlo</span></a></span><span>
</span><span id="line-43"></span><span>
</span><span id="line-44"></span><span>         </span><span class="hs-comment">-- Big-endian store</span><span>
</span><span id="line-45"></span><span>         </span><span id="local-6989586621681034265"><span class="annot"><span class="annottext">mov_hi :: Instr
</span><a href="#local-6989586621681034265"><span class="hs-identifier hs-var hs-var">mov_hi</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Format -&gt; Reg -&gt; AddrMode -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#ST"><span class="hs-identifier hs-var">ST</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034267"><span class="hs-identifier hs-var">rhi</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Imm -&gt; AddrMode
</span><a href="GHC.CmmToAsm.SPARC.AddrMode.html#AddrRegImm"><span class="hs-identifier hs-var">AddrRegImm</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034270"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; Imm
</span><a href="GHC.CmmToAsm.SPARC.Imm.html#ImmInt"><span class="hs-identifier hs-var">ImmInt</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">0</span></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-46"></span><span>         </span><span id="local-6989586621681034260"><span class="annot"><span class="annottext">mov_lo :: Instr
</span><a href="#local-6989586621681034260"><span class="hs-identifier hs-var hs-var">mov_lo</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Format -&gt; Reg -&gt; AddrMode -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#ST"><span class="hs-identifier hs-var">ST</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034271"><span class="hs-identifier hs-var">rlo</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Imm -&gt; AddrMode
</span><a href="GHC.CmmToAsm.SPARC.AddrMode.html#AddrRegImm"><span class="hs-identifier hs-var">AddrRegImm</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034270"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; Imm
</span><a href="GHC.CmmToAsm.SPARC.Imm.html#ImmInt"><span class="hs-identifier hs-var">ImmInt</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">4</span></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-47"></span><span>
</span><span id="line-48"></span><span>         </span><span id="local-6989586621681034259"><span class="annot"><span class="annottext">code :: InstrBlock
</span><a href="#local-6989586621681034259"><span class="hs-identifier hs-var hs-var">code</span></a></span></span><span>   </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681034272"><span class="hs-identifier hs-var">vcode</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; InstrBlock -&gt; InstrBlock
forall a. OrdList a -&gt; OrdList a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#appOL"><span class="hs-operator hs-var">`appOL`</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681034269"><span class="hs-identifier hs-var">acode</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; Instr -&gt; InstrBlock
forall a. OrdList a -&gt; a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#snocOL"><span class="hs-operator hs-var">`snocOL`</span></a></span><span> </span><span class="annot"><span class="annottext">Instr
</span><a href="#local-6989586621681034265"><span class="hs-identifier hs-var">mov_hi</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; Instr -&gt; InstrBlock
forall a. OrdList a -&gt; a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#snocOL"><span class="hs-operator hs-var">`snocOL`</span></a></span><span> </span><span class="annot"><span class="annottext">Instr
</span><a href="#local-6989586621681034260"><span class="hs-identifier hs-var">mov_lo</span></a></span><span>
</span><span id="line-49"></span><span>
</span><span id="line-50"></span><span class="hs-comment">{-     pprTrace &quot;assignMem_I64Code&quot;
        (vcat   [ text &quot;addrTree:  &quot; &lt;+&gt; ppr addrTree
                , text &quot;valueTree: &quot; &lt;+&gt; ppr valueTree
                , text &quot;vcode:&quot;
                , vcat $ map ppr $ fromOL vcode
                , text &quot;&quot;
                , text &quot;acode:&quot;
                , vcat $ map ppr $ fromOL acode ])
       $ -}</span><span>
</span><span id="line-59"></span><span>     </span><span class="annot"><span class="annottext">InstrBlock -&gt; NatM InstrBlock
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681034259"><span class="hs-identifier hs-var">code</span></a></span><span>
</span><span id="line-60"></span><span>
</span><span id="line-61"></span><span>
</span><span id="line-62"></span><span class="hs-comment">-- | Code to assign a 64 bit value to a register.</span><span>
</span><span id="line-63"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen64.html#assignReg_I64Code"><span class="hs-identifier hs-type">assignReg_I64Code</span></a></span><span>
</span><span id="line-64"></span><span>        </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmReg"><span class="hs-identifier hs-type">CmmReg</span></a></span><span>               </span><span class="hs-comment">-- ^ the destination register</span><span>
</span><span id="line-65"></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span>              </span><span class="hs-comment">-- ^ expr producing the source value</span><span>
</span><span id="line-66"></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Monad.html#NatM"><span class="hs-identifier hs-type">NatM</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#InstrBlock"><span class="hs-identifier hs-type">InstrBlock</span></a></span><span>
</span><span id="line-67"></span><span>
</span><span id="line-68"></span><span id="assignReg_I64Code"><span class="annot"><span class="annottext">assignReg_I64Code :: CmmReg -&gt; CmmExpr -&gt; NatM InstrBlock
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen64.html#assignReg_I64Code"><span class="hs-identifier hs-var hs-var">assignReg_I64Code</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmLocal"><span class="hs-identifier hs-type">CmmLocal</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Expr.html#LocalReg"><span class="hs-identifier hs-type">LocalReg</span></a></span><span> </span><span id="local-6989586621681034254"><span class="annot"><span class="annottext">Unique
</span><a href="#local-6989586621681034254"><span class="hs-identifier hs-var">u_dst</span></a></span></span><span> </span><span id="local-6989586621681034253"><span class="annot"><span class="annottext">CmmType
</span><a href="#local-6989586621681034253"><span class="hs-identifier hs-var">pk</span></a></span></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span id="local-6989586621681034252"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681034252"><span class="hs-identifier hs-var">valueTree</span></a></span></span><span>
</span><span id="line-69"></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-70"></span><span>     </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#ChildCode64"><span class="hs-identifier hs-type">ChildCode64</span></a></span><span> </span><span id="local-6989586621681034251"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681034251"><span class="hs-identifier hs-var">vcode</span></a></span></span><span> </span><span id="local-6989586621681034250"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034250"><span class="hs-identifier hs-var">r_src_lo</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM ChildCode64
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen64.html#iselExpr64"><span class="hs-identifier hs-var">iselExpr64</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681034252"><span class="hs-identifier hs-var">valueTree</span></a></span><span>
</span><span id="line-71"></span><span>     </span><span class="hs-keyword">let</span><span>
</span><span id="line-72"></span><span>         </span><span id="local-6989586621681034249"><span class="annot"><span class="annottext">r_dst_lo :: Reg
</span><a href="#local-6989586621681034249"><span class="hs-identifier hs-var hs-var">r_dst_lo</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">VirtualReg -&gt; Reg
</span><a href="GHC.Platform.Reg.html#RegVirtual"><span class="hs-identifier hs-var">RegVirtual</span></a></span><span> </span><span class="annot"><span class="annottext">(VirtualReg -&gt; Reg) -&gt; VirtualReg -&gt; Reg
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">Unique -&gt; Format -&gt; VirtualReg
</span><a href="GHC.CmmToAsm.SPARC.Regs.html#mkVirtualReg"><span class="hs-identifier hs-var">mkVirtualReg</span></a></span><span> </span><span class="annot"><span class="annottext">Unique
</span><a href="#local-6989586621681034254"><span class="hs-identifier hs-var">u_dst</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">CmmType -&gt; Format
</span><a href="GHC.CmmToAsm.Format.html#cmmTypeFormat"><span class="hs-identifier hs-var">cmmTypeFormat</span></a></span><span> </span><span class="annot"><span class="annottext">CmmType
</span><a href="#local-6989586621681034253"><span class="hs-identifier hs-var">pk</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-73"></span><span>         </span><span id="local-6989586621681034245"><span class="annot"><span class="annottext">r_dst_hi :: Reg
</span><a href="#local-6989586621681034245"><span class="hs-identifier hs-var hs-var">r_dst_hi</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Reg -&gt; Reg
</span><a href="GHC.Platform.Reg.html#getHiVRegFromLo"><span class="hs-identifier hs-var">getHiVRegFromLo</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034249"><span class="hs-identifier hs-var">r_dst_lo</span></a></span><span>
</span><span id="line-74"></span><span>         </span><span id="local-6989586621681034244"><span class="annot"><span class="annottext">r_src_hi :: Reg
</span><a href="#local-6989586621681034244"><span class="hs-identifier hs-var hs-var">r_src_hi</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Reg -&gt; Reg
</span><a href="GHC.Platform.Reg.html#getHiVRegFromLo"><span class="hs-identifier hs-var">getHiVRegFromLo</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034250"><span class="hs-identifier hs-var">r_src_lo</span></a></span><span>
</span><span id="line-75"></span><span>         </span><span id="local-6989586621681034243"><span class="annot"><span class="annottext">mov_lo :: Instr
</span><a href="#local-6989586621681034243"><span class="hs-identifier hs-var hs-var">mov_lo</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Reg -&gt; Reg -&gt; Instr
</span><a href="#local-6989586621681034242"><span class="hs-identifier hs-var">mkMOV</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034250"><span class="hs-identifier hs-var">r_src_lo</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034249"><span class="hs-identifier hs-var">r_dst_lo</span></a></span><span>
</span><span id="line-76"></span><span>         </span><span id="local-6989586621681034241"><span class="annot"><span class="annottext">mov_hi :: Instr
</span><a href="#local-6989586621681034241"><span class="hs-identifier hs-var hs-var">mov_hi</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Reg -&gt; Reg -&gt; Instr
</span><a href="#local-6989586621681034242"><span class="hs-identifier hs-var">mkMOV</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034244"><span class="hs-identifier hs-var">r_src_hi</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034245"><span class="hs-identifier hs-var">r_dst_hi</span></a></span><span>
</span><span id="line-77"></span><span>         </span><span id="local-6989586621681034242"><span class="annot"><span class="annottext">mkMOV :: Reg -&gt; Reg -&gt; Instr
</span><a href="#local-6989586621681034242"><span class="hs-identifier hs-var hs-var">mkMOV</span></a></span></span><span> </span><span id="local-6989586621681034240"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034240"><span class="hs-identifier hs-var">sreg</span></a></span></span><span> </span><span id="local-6989586621681034239"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034239"><span class="hs-identifier hs-var">dreg</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Bool -&gt; Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#OR"><span class="hs-identifier hs-var">OR</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.SPARC.Regs.html#g0"><span class="hs-identifier hs-var">g0</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; RI
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#RIReg"><span class="hs-identifier hs-var">RIReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034240"><span class="hs-identifier hs-var">sreg</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034239"><span class="hs-identifier hs-var">dreg</span></a></span><span>
</span><span id="line-78"></span><span>
</span><span id="line-79"></span><span>     </span><span class="annot"><span class="annottext">InstrBlock -&gt; NatM InstrBlock
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681034251"><span class="hs-identifier hs-var">vcode</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; Instr -&gt; InstrBlock
forall a. OrdList a -&gt; a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#snocOL"><span class="hs-operator hs-var">`snocOL`</span></a></span><span> </span><span class="annot"><span class="annottext">Instr
</span><a href="#local-6989586621681034241"><span class="hs-identifier hs-var">mov_hi</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; Instr -&gt; InstrBlock
forall a. OrdList a -&gt; a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#snocOL"><span class="hs-operator hs-var">`snocOL`</span></a></span><span> </span><span class="annot"><span class="annottext">Instr
</span><a href="#local-6989586621681034243"><span class="hs-identifier hs-var">mov_lo</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-80"></span><span>
</span><span id="line-81"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen64.html#assignReg_I64Code"><span class="hs-identifier hs-var">assignReg_I64Code</span></a></span><span> </span><span class="annot"><span class="annottext">CmmReg
</span><span class="hs-identifier">_</span></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><span class="hs-identifier">_</span></span><span>
</span><span id="line-82"></span><span>   </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; NatM InstrBlock
forall a. String -&gt; a
</span><a href="GHC.Utils.Panic.Plain.html#panic"><span class="hs-identifier hs-var">panic</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;assignReg_I64Code(sparc): invalid lvalue&quot;</span></span><span>
</span><span id="line-83"></span><span>
</span><span id="line-84"></span><span>
</span><span id="line-85"></span><span>
</span><span id="line-86"></span><span>
</span><span id="line-87"></span><span class="hs-comment">-- | Get the value of an expression into a 64 bit register.</span><span>
</span><span id="line-88"></span><span>
</span><span id="line-89"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen64.html#iselExpr64"><span class="hs-identifier hs-type">iselExpr64</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Monad.html#NatM"><span class="hs-identifier hs-type">NatM</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#ChildCode64"><span class="hs-identifier hs-type">ChildCode64</span></a></span><span>
</span><span id="line-90"></span><span>
</span><span id="line-91"></span><span class="hs-comment">-- Load a 64 bit word</span><span>
</span><span id="line-92"></span><span id="iselExpr64"><span class="annot"><span class="annottext">iselExpr64 :: CmmExpr -&gt; NatM ChildCode64
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen64.html#iselExpr64"><span class="hs-identifier hs-var hs-var">iselExpr64</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmLoad"><span class="hs-identifier hs-type">CmmLoad</span></a></span><span> </span><span id="local-6989586621681034233"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681034233"><span class="hs-identifier hs-var">addrTree</span></a></span></span><span> </span><span id="local-6989586621681034232"><span class="annot"><span class="annottext">CmmType
</span><a href="#local-6989586621681034232"><span class="hs-identifier hs-var">ty</span></a></span></span><span class="hs-special">)</span><span>
</span><span id="line-93"></span><span> </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">CmmType -&gt; Bool
</span><a href="GHC.Cmm.Type.html#isWord64"><span class="hs-identifier hs-var">isWord64</span></a></span><span> </span><span class="annot"><span class="annottext">CmmType
</span><a href="#local-6989586621681034232"><span class="hs-identifier hs-var">ty</span></a></span><span>
</span><span id="line-94"></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>   </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Amode"><span class="hs-identifier hs-type">Amode</span></a></span><span> </span><span id="local-6989586621681034229"><span class="annot"><span class="annottext">AddrMode
</span><a href="#local-6989586621681034229"><span class="hs-identifier hs-var">amode</span></a></span></span><span> </span><span id="local-6989586621681034228"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681034228"><span class="hs-identifier hs-var">addr_code</span></a></span></span><span>   </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM Amode
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Amode.html#getAmode"><span class="hs-identifier hs-var">getAmode</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681034233"><span class="hs-identifier hs-var">addrTree</span></a></span><span>
</span><span id="line-95"></span><span>        </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681034216"><span class="annot"><span class="annottext">result :: NatM ChildCode64
</span><a href="#local-6989586621681034216"><span class="hs-identifier hs-var hs-var">result</span></a></span></span><span>
</span><span id="line-96"></span><span>
</span><span id="line-97"></span><span>                </span><span class="hs-glyph">|</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.AddrMode.html#AddrRegReg"><span class="hs-identifier hs-type">AddrRegReg</span></a></span><span> </span><span id="local-6989586621681034214"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034214"><span class="hs-identifier hs-var">r1</span></a></span></span><span> </span><span id="local-6989586621681034213"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034213"><span class="hs-identifier hs-var">r2</span></a></span></span><span>      </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">AddrMode
</span><a href="#local-6989586621681034229"><span class="hs-identifier hs-var">amode</span></a></span><span>
</span><span id="line-98"></span><span>                </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>    </span><span id="local-6989586621681034212"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034212"><span class="hs-identifier hs-var">rlo</span></a></span></span><span>     </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">Format -&gt; NatM Reg
</span><a href="GHC.CmmToAsm.Monad.html#getNewRegNat"><span class="hs-identifier hs-var">getNewRegNat</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span>
</span><span id="line-99"></span><span>                        </span><span id="local-6989586621681034210"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034210"><span class="hs-identifier hs-var">tmp</span></a></span></span><span>     </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">Format -&gt; NatM Reg
</span><a href="GHC.CmmToAsm.Monad.html#getNewRegNat"><span class="hs-identifier hs-var">getNewRegNat</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span>
</span><span id="line-100"></span><span>                        </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681034209"><span class="annot"><span class="annottext">rhi :: Reg
</span><a href="#local-6989586621681034209"><span class="hs-identifier hs-var hs-var">rhi</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Reg -&gt; Reg
</span><a href="GHC.Platform.Reg.html#getHiVRegFromLo"><span class="hs-identifier hs-var">getHiVRegFromLo</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034212"><span class="hs-identifier hs-var">rlo</span></a></span><span>
</span><span id="line-101"></span><span>
</span><span id="line-102"></span><span>                        </span><span class="annot"><span class="annottext">ChildCode64 -&gt; NatM ChildCode64
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span>  </span><span class="annot"><span class="annottext">(ChildCode64 -&gt; NatM ChildCode64)
-&gt; ChildCode64 -&gt; NatM ChildCode64
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; Reg -&gt; ChildCode64
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#ChildCode64"><span class="hs-identifier hs-var">ChildCode64</span></a></span><span>
</span><span id="line-103"></span><span>                                </span><span class="hs-special">(</span><span>        </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681034228"><span class="hs-identifier hs-var">addr_code</span></a></span><span>
</span><span id="line-104"></span><span>                                </span><span class="annot"><span class="annottext">InstrBlock -&gt; InstrBlock -&gt; InstrBlock
forall a. OrdList a -&gt; OrdList a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#appOL"><span class="hs-operator hs-var">`appOL`</span></a></span><span>  </span><span class="annot"><span class="annottext">[Instr] -&gt; InstrBlock
forall a. [a] -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#toOL"><span class="hs-identifier hs-var">toOL</span></a></span><span>
</span><span id="line-105"></span><span>                                         </span><span class="hs-special">[</span><span> </span><span class="annot"><span class="annottext">Bool -&gt; Bool -&gt; Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#ADD"><span class="hs-identifier hs-var">ADD</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034214"><span class="hs-identifier hs-var">r1</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; RI
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#RIReg"><span class="hs-identifier hs-var">RIReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034213"><span class="hs-identifier hs-var">r2</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034210"><span class="hs-identifier hs-var">tmp</span></a></span><span>
</span><span id="line-106"></span><span>                                         </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Format -&gt; AddrMode -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#LD"><span class="hs-identifier hs-var">LD</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Imm -&gt; AddrMode
</span><a href="GHC.CmmToAsm.SPARC.AddrMode.html#AddrRegImm"><span class="hs-identifier hs-var">AddrRegImm</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034210"><span class="hs-identifier hs-var">tmp</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; Imm
</span><a href="GHC.CmmToAsm.SPARC.Imm.html#ImmInt"><span class="hs-identifier hs-var">ImmInt</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">0</span></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034209"><span class="hs-identifier hs-var">rhi</span></a></span><span>
</span><span id="line-107"></span><span>                                         </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Format -&gt; AddrMode -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#LD"><span class="hs-identifier hs-var">LD</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Imm -&gt; AddrMode
</span><a href="GHC.CmmToAsm.SPARC.AddrMode.html#AddrRegImm"><span class="hs-identifier hs-var">AddrRegImm</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034210"><span class="hs-identifier hs-var">tmp</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; Imm
</span><a href="GHC.CmmToAsm.SPARC.Imm.html#ImmInt"><span class="hs-identifier hs-var">ImmInt</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">4</span></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034212"><span class="hs-identifier hs-var">rlo</span></a></span><span> </span><span class="hs-special">]</span><span class="hs-special">)</span><span>
</span><span id="line-108"></span><span>                                </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034212"><span class="hs-identifier hs-var">rlo</span></a></span><span>
</span><span id="line-109"></span><span>
</span><span id="line-110"></span><span>                </span><span class="hs-glyph">|</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.AddrMode.html#AddrRegImm"><span class="hs-identifier hs-type">AddrRegImm</span></a></span><span> </span><span id="local-6989586621681034205"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034205"><span class="hs-identifier hs-var">r1</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.SPARC.Imm.html#ImmInt"><span class="hs-identifier hs-type">ImmInt</span></a></span><span> </span><span id="local-6989586621681034204"><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681034204"><span class="hs-identifier hs-var">i</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">AddrMode
</span><a href="#local-6989586621681034229"><span class="hs-identifier hs-var">amode</span></a></span><span>
</span><span id="line-111"></span><span>                </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>    </span><span id="local-6989586621681034203"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034203"><span class="hs-identifier hs-var">rlo</span></a></span></span><span>     </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">Format -&gt; NatM Reg
</span><a href="GHC.CmmToAsm.Monad.html#getNewRegNat"><span class="hs-identifier hs-var">getNewRegNat</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span>
</span><span id="line-112"></span><span>                        </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681034202"><span class="annot"><span class="annottext">rhi :: Reg
</span><a href="#local-6989586621681034202"><span class="hs-identifier hs-var hs-var">rhi</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Reg -&gt; Reg
</span><a href="GHC.Platform.Reg.html#getHiVRegFromLo"><span class="hs-identifier hs-var">getHiVRegFromLo</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034203"><span class="hs-identifier hs-var">rlo</span></a></span><span>
</span><span id="line-113"></span><span>
</span><span id="line-114"></span><span>                        </span><span class="annot"><span class="annottext">ChildCode64 -&gt; NatM ChildCode64
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span>  </span><span class="annot"><span class="annottext">(ChildCode64 -&gt; NatM ChildCode64)
-&gt; ChildCode64 -&gt; NatM ChildCode64
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; Reg -&gt; ChildCode64
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#ChildCode64"><span class="hs-identifier hs-var">ChildCode64</span></a></span><span>
</span><span id="line-115"></span><span>                                </span><span class="hs-special">(</span><span>        </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681034228"><span class="hs-identifier hs-var">addr_code</span></a></span><span>
</span><span id="line-116"></span><span>                                </span><span class="annot"><span class="annottext">InstrBlock -&gt; InstrBlock -&gt; InstrBlock
forall a. OrdList a -&gt; OrdList a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#appOL"><span class="hs-operator hs-var">`appOL`</span></a></span><span>  </span><span class="annot"><span class="annottext">[Instr] -&gt; InstrBlock
forall a. [a] -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#toOL"><span class="hs-identifier hs-var">toOL</span></a></span><span>
</span><span id="line-117"></span><span>                                         </span><span class="hs-special">[</span><span> </span><span class="annot"><span class="annottext">Format -&gt; AddrMode -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#LD"><span class="hs-identifier hs-var">LD</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Imm -&gt; AddrMode
</span><a href="GHC.CmmToAsm.SPARC.AddrMode.html#AddrRegImm"><span class="hs-identifier hs-var">AddrRegImm</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034205"><span class="hs-identifier hs-var">r1</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; Imm
</span><a href="GHC.CmmToAsm.SPARC.Imm.html#ImmInt"><span class="hs-identifier hs-var">ImmInt</span></a></span><span> </span><span class="annot"><span class="annottext">(Int -&gt; Imm) -&gt; Int -&gt; Imm
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">0</span></span><span> </span><span class="annot"><span class="annottext">Int -&gt; Int -&gt; Int
forall a. Num a =&gt; a -&gt; a -&gt; a
</span><a href="../../base/src/GHC.Num.html#%2B"><span class="hs-operator hs-var">+</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681034204"><span class="hs-identifier hs-var">i</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034202"><span class="hs-identifier hs-var">rhi</span></a></span><span>
</span><span id="line-118"></span><span>                                         </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Format -&gt; AddrMode -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#LD"><span class="hs-identifier hs-var">LD</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Imm -&gt; AddrMode
</span><a href="GHC.CmmToAsm.SPARC.AddrMode.html#AddrRegImm"><span class="hs-identifier hs-var">AddrRegImm</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034205"><span class="hs-identifier hs-var">r1</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; Imm
</span><a href="GHC.CmmToAsm.SPARC.Imm.html#ImmInt"><span class="hs-identifier hs-var">ImmInt</span></a></span><span> </span><span class="annot"><span class="annottext">(Int -&gt; Imm) -&gt; Int -&gt; Imm
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">4</span></span><span> </span><span class="annot"><span class="annottext">Int -&gt; Int -&gt; Int
forall a. Num a =&gt; a -&gt; a -&gt; a
</span><a href="../../base/src/GHC.Num.html#%2B"><span class="hs-operator hs-var">+</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681034204"><span class="hs-identifier hs-var">i</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034203"><span class="hs-identifier hs-var">rlo</span></a></span><span> </span><span class="hs-special">]</span><span class="hs-special">)</span><span>
</span><span id="line-119"></span><span>                                </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034203"><span class="hs-identifier hs-var">rlo</span></a></span><span>
</span><span id="line-120"></span><span>
</span><span id="line-121"></span><span>                </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Bool
</span><a href="../../base/src/GHC.Base.html#otherwise"><span class="hs-identifier hs-var">otherwise</span></a></span><span>
</span><span id="line-122"></span><span>                </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; NatM ChildCode64
forall a. String -&gt; a
</span><a href="GHC.Utils.Panic.Plain.html#panic"><span class="hs-identifier hs-var">panic</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;SPARC.CodeGen.Gen64: no match&quot;</span></span><span>
</span><span id="line-123"></span><span>
</span><span id="line-124"></span><span>        </span><span class="annot"><span class="annottext">NatM ChildCode64
</span><a href="#local-6989586621681034216"><span class="hs-identifier hs-var">result</span></a></span><span>
</span><span id="line-125"></span><span>
</span><span id="line-126"></span><span>
</span><span id="line-127"></span><span class="hs-comment">-- Add a literal to a 64 bit integer</span><span>
</span><span id="line-128"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen64.html#iselExpr64"><span class="hs-identifier hs-var">iselExpr64</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmMachOp"><span class="hs-identifier hs-type">CmmMachOp</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_Add"><span class="hs-identifier hs-type">MO_Add</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><span class="hs-identifier">_</span></span><span class="hs-special">)</span><span> </span><span class="hs-special">[</span><span id="local-6989586621681034198"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681034198"><span class="hs-identifier hs-var">e1</span></a></span></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmLit"><span class="hs-identifier hs-type">CmmLit</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmInt"><span class="hs-identifier hs-type">CmmInt</span></a></span><span> </span><span id="local-6989586621681034195"><span class="annot"><span class="annottext">Integer
</span><a href="#local-6989586621681034195"><span class="hs-identifier hs-var">i</span></a></span></span><span> </span><span class="annot"><span class="annottext">Width
</span><span class="hs-identifier">_</span></span><span class="hs-special">)</span><span class="hs-special">]</span><span class="hs-special">)</span><span>
</span><span id="line-129"></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>   </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#ChildCode64"><span class="hs-identifier hs-type">ChildCode64</span></a></span><span> </span><span id="local-6989586621681034194"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681034194"><span class="hs-identifier hs-var">code1</span></a></span></span><span> </span><span id="local-6989586621681034193"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034193"><span class="hs-identifier hs-var">r1_lo</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM ChildCode64
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen64.html#iselExpr64"><span class="hs-identifier hs-var">iselExpr64</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681034198"><span class="hs-identifier hs-var">e1</span></a></span><span>
</span><span id="line-130"></span><span>        </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681034192"><span class="annot"><span class="annottext">r1_hi :: Reg
</span><a href="#local-6989586621681034192"><span class="hs-identifier hs-var hs-var">r1_hi</span></a></span></span><span>       </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Reg -&gt; Reg
</span><a href="GHC.Platform.Reg.html#getHiVRegFromLo"><span class="hs-identifier hs-var">getHiVRegFromLo</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034193"><span class="hs-identifier hs-var">r1_lo</span></a></span><span>
</span><span id="line-131"></span><span>
</span><span id="line-132"></span><span>        </span><span id="local-6989586621681034191"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034191"><span class="hs-identifier hs-var">r_dst_lo</span></a></span></span><span>        </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">Format -&gt; NatM Reg
</span><a href="GHC.CmmToAsm.Monad.html#getNewRegNat"><span class="hs-identifier hs-var">getNewRegNat</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span>
</span><span id="line-133"></span><span>        </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681034190"><span class="annot"><span class="annottext">r_dst_hi :: Reg
</span><a href="#local-6989586621681034190"><span class="hs-identifier hs-var hs-var">r_dst_hi</span></a></span></span><span>    </span><span class="hs-glyph">=</span><span>  </span><span class="annot"><span class="annottext">Reg -&gt; Reg
</span><a href="GHC.Platform.Reg.html#getHiVRegFromLo"><span class="hs-identifier hs-var">getHiVRegFromLo</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034191"><span class="hs-identifier hs-var">r_dst_lo</span></a></span><span>
</span><span id="line-134"></span><span>
</span><span id="line-135"></span><span>        </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681034189"><span class="annot"><span class="annottext">code :: InstrBlock
</span><a href="#local-6989586621681034189"><span class="hs-identifier hs-var hs-var">code</span></a></span></span><span> </span><span class="hs-glyph">=</span><span>      </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681034194"><span class="hs-identifier hs-var">code1</span></a></span><span>
</span><span id="line-136"></span><span>                </span><span class="annot"><span class="annottext">InstrBlock -&gt; InstrBlock -&gt; InstrBlock
forall a. OrdList a -&gt; OrdList a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#appOL"><span class="hs-operator hs-var">`appOL`</span></a></span><span> </span><span class="annot"><span class="annottext">[Instr] -&gt; InstrBlock
forall a. [a] -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#toOL"><span class="hs-identifier hs-var">toOL</span></a></span><span>
</span><span id="line-137"></span><span>                        </span><span class="hs-special">[</span><span> </span><span class="annot"><span class="annottext">Bool -&gt; Bool -&gt; Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#ADD"><span class="hs-identifier hs-var">ADD</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">True</span></span><span>  </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034193"><span class="hs-identifier hs-var">r1_lo</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Imm -&gt; RI
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#RIImm"><span class="hs-identifier hs-var">RIImm</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Integer -&gt; Imm
</span><a href="GHC.CmmToAsm.SPARC.Imm.html#ImmInteger"><span class="hs-identifier hs-var">ImmInteger</span></a></span><span> </span><span class="annot"><span class="annottext">Integer
</span><a href="#local-6989586621681034195"><span class="hs-identifier hs-var">i</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034191"><span class="hs-identifier hs-var">r_dst_lo</span></a></span><span>
</span><span id="line-138"></span><span>                        </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Bool -&gt; Bool -&gt; Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#ADD"><span class="hs-identifier hs-var">ADD</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">True</span></span><span>  </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034192"><span class="hs-identifier hs-var">r1_hi</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; RI
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#RIReg"><span class="hs-identifier hs-var">RIReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.SPARC.Regs.html#g0"><span class="hs-identifier hs-var">g0</span></a></span><span class="hs-special">)</span><span>         </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034190"><span class="hs-identifier hs-var">r_dst_hi</span></a></span><span> </span><span class="hs-special">]</span><span>
</span><span id="line-139"></span><span>
</span><span id="line-140"></span><span>        </span><span class="annot"><span class="annottext">ChildCode64 -&gt; NatM ChildCode64
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span>  </span><span class="annot"><span class="annottext">(ChildCode64 -&gt; NatM ChildCode64)
-&gt; ChildCode64 -&gt; NatM ChildCode64
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; Reg -&gt; ChildCode64
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#ChildCode64"><span class="hs-identifier hs-var">ChildCode64</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681034189"><span class="hs-identifier hs-var">code</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034191"><span class="hs-identifier hs-var">r_dst_lo</span></a></span><span>
</span><span id="line-141"></span><span>
</span><span id="line-142"></span><span>
</span><span id="line-143"></span><span class="hs-comment">-- Addition of II64</span><span>
</span><span id="line-144"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen64.html#iselExpr64"><span class="hs-identifier hs-var">iselExpr64</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmMachOp"><span class="hs-identifier hs-type">CmmMachOp</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_Add"><span class="hs-identifier hs-type">MO_Add</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><span class="hs-identifier">_</span></span><span class="hs-special">)</span><span> </span><span class="hs-special">[</span><span id="local-6989586621681034186"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681034186"><span class="hs-identifier hs-var">e1</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681034185"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681034185"><span class="hs-identifier hs-var">e2</span></a></span></span><span class="hs-special">]</span><span class="hs-special">)</span><span>
</span><span id="line-145"></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>   </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#ChildCode64"><span class="hs-identifier hs-type">ChildCode64</span></a></span><span> </span><span id="local-6989586621681034184"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681034184"><span class="hs-identifier hs-var">code1</span></a></span></span><span> </span><span id="local-6989586621681034183"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034183"><span class="hs-identifier hs-var">r1_lo</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM ChildCode64
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen64.html#iselExpr64"><span class="hs-identifier hs-var">iselExpr64</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681034186"><span class="hs-identifier hs-var">e1</span></a></span><span>
</span><span id="line-146"></span><span>        </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681034182"><span class="annot"><span class="annottext">r1_hi :: Reg
</span><a href="#local-6989586621681034182"><span class="hs-identifier hs-var hs-var">r1_hi</span></a></span></span><span>       </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Reg -&gt; Reg
</span><a href="GHC.Platform.Reg.html#getHiVRegFromLo"><span class="hs-identifier hs-var">getHiVRegFromLo</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034183"><span class="hs-identifier hs-var">r1_lo</span></a></span><span>
</span><span id="line-147"></span><span>
</span><span id="line-148"></span><span>        </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#ChildCode64"><span class="hs-identifier hs-type">ChildCode64</span></a></span><span> </span><span id="local-6989586621681034181"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681034181"><span class="hs-identifier hs-var">code2</span></a></span></span><span> </span><span id="local-6989586621681034180"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034180"><span class="hs-identifier hs-var">r2_lo</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM ChildCode64
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen64.html#iselExpr64"><span class="hs-identifier hs-var">iselExpr64</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681034185"><span class="hs-identifier hs-var">e2</span></a></span><span>
</span><span id="line-149"></span><span>        </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681034179"><span class="annot"><span class="annottext">r2_hi :: Reg
</span><a href="#local-6989586621681034179"><span class="hs-identifier hs-var hs-var">r2_hi</span></a></span></span><span>       </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Reg -&gt; Reg
</span><a href="GHC.Platform.Reg.html#getHiVRegFromLo"><span class="hs-identifier hs-var">getHiVRegFromLo</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034180"><span class="hs-identifier hs-var">r2_lo</span></a></span><span>
</span><span id="line-150"></span><span>
</span><span id="line-151"></span><span>        </span><span id="local-6989586621681034178"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034178"><span class="hs-identifier hs-var">r_dst_lo</span></a></span></span><span>        </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">Format -&gt; NatM Reg
</span><a href="GHC.CmmToAsm.Monad.html#getNewRegNat"><span class="hs-identifier hs-var">getNewRegNat</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span>
</span><span id="line-152"></span><span>        </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681034177"><span class="annot"><span class="annottext">r_dst_hi :: Reg
</span><a href="#local-6989586621681034177"><span class="hs-identifier hs-var hs-var">r_dst_hi</span></a></span></span><span>    </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Reg -&gt; Reg
</span><a href="GHC.Platform.Reg.html#getHiVRegFromLo"><span class="hs-identifier hs-var">getHiVRegFromLo</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034178"><span class="hs-identifier hs-var">r_dst_lo</span></a></span><span>
</span><span id="line-153"></span><span>
</span><span id="line-154"></span><span>        </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681034176"><span class="annot"><span class="annottext">code :: InstrBlock
</span><a href="#local-6989586621681034176"><span class="hs-identifier hs-var hs-var">code</span></a></span></span><span> </span><span class="hs-glyph">=</span><span>      </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681034184"><span class="hs-identifier hs-var">code1</span></a></span><span>
</span><span id="line-155"></span><span>                </span><span class="annot"><span class="annottext">InstrBlock -&gt; InstrBlock -&gt; InstrBlock
forall a. OrdList a -&gt; OrdList a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#appOL"><span class="hs-operator hs-var">`appOL`</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681034181"><span class="hs-identifier hs-var">code2</span></a></span><span>
</span><span id="line-156"></span><span>                </span><span class="annot"><span class="annottext">InstrBlock -&gt; InstrBlock -&gt; InstrBlock
forall a. OrdList a -&gt; OrdList a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#appOL"><span class="hs-operator hs-var">`appOL`</span></a></span><span> </span><span class="annot"><span class="annottext">[Instr] -&gt; InstrBlock
forall a. [a] -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#toOL"><span class="hs-identifier hs-var">toOL</span></a></span><span>
</span><span id="line-157"></span><span>                        </span><span class="hs-special">[</span><span> </span><span class="annot"><span class="annottext">Bool -&gt; Bool -&gt; Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#ADD"><span class="hs-identifier hs-var">ADD</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">True</span></span><span>  </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034183"><span class="hs-identifier hs-var">r1_lo</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; RI
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#RIReg"><span class="hs-identifier hs-var">RIReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034180"><span class="hs-identifier hs-var">r2_lo</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034178"><span class="hs-identifier hs-var">r_dst_lo</span></a></span><span>
</span><span id="line-158"></span><span>                        </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Bool -&gt; Bool -&gt; Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#ADD"><span class="hs-identifier hs-var">ADD</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">True</span></span><span>  </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034182"><span class="hs-identifier hs-var">r1_hi</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; RI
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#RIReg"><span class="hs-identifier hs-var">RIReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034179"><span class="hs-identifier hs-var">r2_hi</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034177"><span class="hs-identifier hs-var">r_dst_hi</span></a></span><span> </span><span class="hs-special">]</span><span>
</span><span id="line-159"></span><span>
</span><span id="line-160"></span><span>        </span><span class="annot"><span class="annottext">ChildCode64 -&gt; NatM ChildCode64
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span>  </span><span class="annot"><span class="annottext">(ChildCode64 -&gt; NatM ChildCode64)
-&gt; ChildCode64 -&gt; NatM ChildCode64
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; Reg -&gt; ChildCode64
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#ChildCode64"><span class="hs-identifier hs-var">ChildCode64</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681034176"><span class="hs-identifier hs-var">code</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034178"><span class="hs-identifier hs-var">r_dst_lo</span></a></span><span>
</span><span id="line-161"></span><span>
</span><span id="line-162"></span><span>
</span><span id="line-163"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen64.html#iselExpr64"><span class="hs-identifier hs-var">iselExpr64</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmReg"><span class="hs-identifier hs-type">CmmReg</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmLocal"><span class="hs-identifier hs-type">CmmLocal</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Expr.html#LocalReg"><span class="hs-identifier hs-type">LocalReg</span></a></span><span> </span><span id="local-6989586621681034174"><span class="annot"><span class="annottext">Unique
</span><a href="#local-6989586621681034174"><span class="hs-identifier hs-var">uq</span></a></span></span><span> </span><span id="local-6989586621681034173"><span class="annot"><span class="annottext">CmmType
</span><a href="#local-6989586621681034173"><span class="hs-identifier hs-var">ty</span></a></span></span><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-164"></span><span> </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">CmmType -&gt; Bool
</span><a href="GHC.Cmm.Type.html#isWord64"><span class="hs-identifier hs-var">isWord64</span></a></span><span> </span><span class="annot"><span class="annottext">CmmType
</span><a href="#local-6989586621681034173"><span class="hs-identifier hs-var">ty</span></a></span><span>
</span><span id="line-165"></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-166"></span><span>     </span><span id="local-6989586621681034172"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034172"><span class="hs-identifier hs-var">r_dst_lo</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span>  </span><span class="annot"><span class="annottext">Format -&gt; NatM Reg
</span><a href="GHC.CmmToAsm.Monad.html#getNewRegNat"><span class="hs-identifier hs-var">getNewRegNat</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span>
</span><span id="line-167"></span><span>     </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681034171"><span class="annot"><span class="annottext">r_dst_hi :: Reg
</span><a href="#local-6989586621681034171"><span class="hs-identifier hs-var hs-var">r_dst_hi</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Reg -&gt; Reg
</span><a href="GHC.Platform.Reg.html#getHiVRegFromLo"><span class="hs-identifier hs-var">getHiVRegFromLo</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034172"><span class="hs-identifier hs-var">r_dst_lo</span></a></span><span>
</span><span id="line-168"></span><span>         </span><span id="local-6989586621681034170"><span class="annot"><span class="annottext">r_src_lo :: Reg
</span><a href="#local-6989586621681034170"><span class="hs-identifier hs-var hs-var">r_src_lo</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">VirtualReg -&gt; Reg
</span><a href="GHC.Platform.Reg.html#RegVirtual"><span class="hs-identifier hs-var">RegVirtual</span></a></span><span> </span><span class="annot"><span class="annottext">(VirtualReg -&gt; Reg) -&gt; VirtualReg -&gt; Reg
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">Unique -&gt; Format -&gt; VirtualReg
</span><a href="GHC.CmmToAsm.SPARC.Regs.html#mkVirtualReg"><span class="hs-identifier hs-var">mkVirtualReg</span></a></span><span> </span><span class="annot"><span class="annottext">Unique
</span><a href="#local-6989586621681034174"><span class="hs-identifier hs-var">uq</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span>
</span><span id="line-169"></span><span>         </span><span id="local-6989586621681034169"><span class="annot"><span class="annottext">r_src_hi :: Reg
</span><a href="#local-6989586621681034169"><span class="hs-identifier hs-var hs-var">r_src_hi</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Reg -&gt; Reg
</span><a href="GHC.Platform.Reg.html#getHiVRegFromLo"><span class="hs-identifier hs-var">getHiVRegFromLo</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034170"><span class="hs-identifier hs-var">r_src_lo</span></a></span><span>
</span><span id="line-170"></span><span>         </span><span id="local-6989586621681034168"><span class="annot"><span class="annottext">mov_lo :: Instr
</span><a href="#local-6989586621681034168"><span class="hs-identifier hs-var hs-var">mov_lo</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Reg -&gt; Reg -&gt; Instr
</span><a href="#local-6989586621681034167"><span class="hs-identifier hs-var">mkMOV</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034170"><span class="hs-identifier hs-var">r_src_lo</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034172"><span class="hs-identifier hs-var">r_dst_lo</span></a></span><span>
</span><span id="line-171"></span><span>         </span><span id="local-6989586621681034166"><span class="annot"><span class="annottext">mov_hi :: Instr
</span><a href="#local-6989586621681034166"><span class="hs-identifier hs-var hs-var">mov_hi</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Reg -&gt; Reg -&gt; Instr
</span><a href="#local-6989586621681034167"><span class="hs-identifier hs-var">mkMOV</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034169"><span class="hs-identifier hs-var">r_src_hi</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034171"><span class="hs-identifier hs-var">r_dst_hi</span></a></span><span>
</span><span id="line-172"></span><span>         </span><span id="local-6989586621681034167"><span class="annot"><span class="annottext">mkMOV :: Reg -&gt; Reg -&gt; Instr
</span><a href="#local-6989586621681034167"><span class="hs-identifier hs-var hs-var">mkMOV</span></a></span></span><span> </span><span id="local-6989586621681034165"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034165"><span class="hs-identifier hs-var">sreg</span></a></span></span><span> </span><span id="local-6989586621681034164"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034164"><span class="hs-identifier hs-var">dreg</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Bool -&gt; Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#OR"><span class="hs-identifier hs-var">OR</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.SPARC.Regs.html#g0"><span class="hs-identifier hs-var">g0</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; RI
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#RIReg"><span class="hs-identifier hs-var">RIReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034165"><span class="hs-identifier hs-var">sreg</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034164"><span class="hs-identifier hs-var">dreg</span></a></span><span>
</span><span id="line-173"></span><span>     </span><span class="annot"><span class="annottext">ChildCode64 -&gt; NatM ChildCode64
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span>
</span><span id="line-174"></span><span>            </span><span class="annot"><span class="annottext">InstrBlock -&gt; Reg -&gt; ChildCode64
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#ChildCode64"><span class="hs-identifier hs-var">ChildCode64</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">[Instr] -&gt; InstrBlock
forall a. [a] -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#toOL"><span class="hs-identifier hs-var">toOL</span></a></span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Instr
</span><a href="#local-6989586621681034166"><span class="hs-identifier hs-var">mov_hi</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Instr
</span><a href="#local-6989586621681034168"><span class="hs-identifier hs-var">mov_lo</span></a></span><span class="hs-special">]</span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034172"><span class="hs-identifier hs-var">r_dst_lo</span></a></span><span>
</span><span id="line-175"></span><span>         </span><span class="hs-special">)</span><span>
</span><span id="line-176"></span><span>
</span><span id="line-177"></span><span class="hs-comment">-- Convert something into II64</span><span>
</span><span id="line-178"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen64.html#iselExpr64"><span class="hs-identifier hs-var">iselExpr64</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmMachOp"><span class="hs-identifier hs-type">CmmMachOp</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_UU_Conv"><span class="hs-identifier hs-type">MO_UU_Conv</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><span class="hs-identifier">_</span></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W64"><span class="hs-identifier hs-var">W64</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">[</span><span id="local-6989586621681034161"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681034161"><span class="hs-identifier hs-var">expr</span></a></span></span><span class="hs-special">]</span><span class="hs-special">)</span><span>
</span><span id="line-179"></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-180"></span><span>        </span><span id="local-6989586621681034160"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034160"><span class="hs-identifier hs-var">r_dst_lo</span></a></span></span><span>        </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">Format -&gt; NatM Reg
</span><a href="GHC.CmmToAsm.Monad.html#getNewRegNat"><span class="hs-identifier hs-var">getNewRegNat</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span>
</span><span id="line-181"></span><span>        </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681034159"><span class="annot"><span class="annottext">r_dst_hi :: Reg
</span><a href="#local-6989586621681034159"><span class="hs-identifier hs-var hs-var">r_dst_hi</span></a></span></span><span>    </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Reg -&gt; Reg
</span><a href="GHC.Platform.Reg.html#getHiVRegFromLo"><span class="hs-identifier hs-var">getHiVRegFromLo</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034160"><span class="hs-identifier hs-var">r_dst_lo</span></a></span><span>
</span><span id="line-182"></span><span>
</span><span id="line-183"></span><span>        </span><span class="hs-comment">-- compute expr and load it into r_dst_lo</span><span>
</span><span id="line-184"></span><span>        </span><span class="hs-special">(</span><span id="local-6989586621681034158"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034158"><span class="hs-identifier hs-var">a_reg</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681034157"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681034157"><span class="hs-identifier hs-var">a_code</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM (Reg, InstrBlock)
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getSomeReg"><span class="hs-identifier hs-var">getSomeReg</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681034161"><span class="hs-identifier hs-var">expr</span></a></span><span>
</span><span id="line-185"></span><span>
</span><span id="line-186"></span><span>        </span><span id="local-6989586621681034156"><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681034156"><span class="hs-identifier hs-var">platform</span></a></span></span><span>        </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">NatM Platform
</span><a href="GHC.CmmToAsm.Monad.html#getPlatform"><span class="hs-identifier hs-var">getPlatform</span></a></span><span>
</span><span id="line-187"></span><span>        </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681034151"><span class="annot"><span class="annottext">code :: InstrBlock
</span><a href="#local-6989586621681034151"><span class="hs-identifier hs-var hs-var">code</span></a></span></span><span>        </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681034157"><span class="hs-identifier hs-var">a_code</span></a></span><span>
</span><span id="line-188"></span><span>                </span><span class="annot"><span class="annottext">InstrBlock -&gt; InstrBlock -&gt; InstrBlock
forall a. OrdList a -&gt; OrdList a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#appOL"><span class="hs-operator hs-var">`appOL`</span></a></span><span> </span><span class="annot"><span class="annottext">[Instr] -&gt; InstrBlock
forall a. [a] -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#toOL"><span class="hs-identifier hs-var">toOL</span></a></span><span>
</span><span id="line-189"></span><span>                        </span><span class="hs-special">[</span><span> </span><span class="annot"><span class="annottext">Platform -&gt; Reg -&gt; Reg -&gt; Instr
forall instr. Instruction instr =&gt; Platform -&gt; Reg -&gt; Reg -&gt; instr
</span><a href="GHC.CmmToAsm.Instr.html#mkRegRegMoveInstr"><span class="hs-identifier hs-var">mkRegRegMoveInstr</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681034156"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.SPARC.Regs.html#g0"><span class="hs-identifier hs-var">g0</span></a></span><span>    </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034159"><span class="hs-identifier hs-var">r_dst_hi</span></a></span><span>     </span><span class="hs-comment">-- clear high 32 bits</span><span>
</span><span id="line-190"></span><span>                        </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Platform -&gt; Reg -&gt; Reg -&gt; Instr
forall instr. Instruction instr =&gt; Platform -&gt; Reg -&gt; Reg -&gt; instr
</span><a href="GHC.CmmToAsm.Instr.html#mkRegRegMoveInstr"><span class="hs-identifier hs-var">mkRegRegMoveInstr</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681034156"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034158"><span class="hs-identifier hs-var">a_reg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034160"><span class="hs-identifier hs-var">r_dst_lo</span></a></span><span> </span><span class="hs-special">]</span><span>
</span><span id="line-191"></span><span>
</span><span id="line-192"></span><span>        </span><span class="annot"><span class="annottext">ChildCode64 -&gt; NatM ChildCode64
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span>  </span><span class="annot"><span class="annottext">(ChildCode64 -&gt; NatM ChildCode64)
-&gt; ChildCode64 -&gt; NatM ChildCode64
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; Reg -&gt; ChildCode64
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#ChildCode64"><span class="hs-identifier hs-var">ChildCode64</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681034151"><span class="hs-identifier hs-var">code</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034160"><span class="hs-identifier hs-var">r_dst_lo</span></a></span><span>
</span><span id="line-193"></span><span>
</span><span id="line-194"></span><span class="hs-comment">-- only W32 supported for now</span><span>
</span><span id="line-195"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen64.html#iselExpr64"><span class="hs-identifier hs-var">iselExpr64</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmMachOp"><span class="hs-identifier hs-type">CmmMachOp</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_SS_Conv"><span class="hs-identifier hs-type">MO_SS_Conv</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W32"><span class="hs-identifier hs-var">W32</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W64"><span class="hs-identifier hs-var">W64</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">[</span><span id="local-6989586621681034147"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681034147"><span class="hs-identifier hs-var">expr</span></a></span></span><span class="hs-special">]</span><span class="hs-special">)</span><span>
</span><span id="line-196"></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-197"></span><span>        </span><span id="local-6989586621681034146"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034146"><span class="hs-identifier hs-var">r_dst_lo</span></a></span></span><span>        </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">Format -&gt; NatM Reg
</span><a href="GHC.CmmToAsm.Monad.html#getNewRegNat"><span class="hs-identifier hs-var">getNewRegNat</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span>
</span><span id="line-198"></span><span>        </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681034145"><span class="annot"><span class="annottext">r_dst_hi :: Reg
</span><a href="#local-6989586621681034145"><span class="hs-identifier hs-var hs-var">r_dst_hi</span></a></span></span><span>    </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Reg -&gt; Reg
</span><a href="GHC.Platform.Reg.html#getHiVRegFromLo"><span class="hs-identifier hs-var">getHiVRegFromLo</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034146"><span class="hs-identifier hs-var">r_dst_lo</span></a></span><span>
</span><span id="line-199"></span><span>
</span><span id="line-200"></span><span>        </span><span class="hs-comment">-- compute expr and load it into r_dst_lo</span><span>
</span><span id="line-201"></span><span>        </span><span class="hs-special">(</span><span id="local-6989586621681034144"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034144"><span class="hs-identifier hs-var">a_reg</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681034143"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681034143"><span class="hs-identifier hs-var">a_code</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM (Reg, InstrBlock)
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getSomeReg"><span class="hs-identifier hs-var">getSomeReg</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681034147"><span class="hs-identifier hs-var">expr</span></a></span><span>
</span><span id="line-202"></span><span>
</span><span id="line-203"></span><span>        </span><span id="local-6989586621681034142"><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681034142"><span class="hs-identifier hs-var">platform</span></a></span></span><span>        </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">NatM Platform
</span><a href="GHC.CmmToAsm.Monad.html#getPlatform"><span class="hs-identifier hs-var">getPlatform</span></a></span><span>
</span><span id="line-204"></span><span>        </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681034140"><span class="annot"><span class="annottext">code :: InstrBlock
</span><a href="#local-6989586621681034140"><span class="hs-identifier hs-var hs-var">code</span></a></span></span><span>        </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681034143"><span class="hs-identifier hs-var">a_code</span></a></span><span>
</span><span id="line-205"></span><span>                </span><span class="annot"><span class="annottext">InstrBlock -&gt; InstrBlock -&gt; InstrBlock
forall a. OrdList a -&gt; OrdList a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#appOL"><span class="hs-operator hs-var">`appOL`</span></a></span><span> </span><span class="annot"><span class="annottext">[Instr] -&gt; InstrBlock
forall a. [a] -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#toOL"><span class="hs-identifier hs-var">toOL</span></a></span><span>
</span><span id="line-206"></span><span>                        </span><span class="hs-special">[</span><span> </span><span class="annot"><span class="annottext">Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#SRA"><span class="hs-identifier hs-var">SRA</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034144"><span class="hs-identifier hs-var">a_reg</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Imm -&gt; RI
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#RIImm"><span class="hs-identifier hs-var">RIImm</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; Imm
</span><a href="GHC.CmmToAsm.SPARC.Imm.html#ImmInt"><span class="hs-identifier hs-var">ImmInt</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">31</span></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034145"><span class="hs-identifier hs-var">r_dst_hi</span></a></span><span>
</span><span id="line-207"></span><span>                        </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Platform -&gt; Reg -&gt; Reg -&gt; Instr
forall instr. Instruction instr =&gt; Platform -&gt; Reg -&gt; Reg -&gt; instr
</span><a href="GHC.CmmToAsm.Instr.html#mkRegRegMoveInstr"><span class="hs-identifier hs-var">mkRegRegMoveInstr</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681034142"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034144"><span class="hs-identifier hs-var">a_reg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034146"><span class="hs-identifier hs-var">r_dst_lo</span></a></span><span> </span><span class="hs-special">]</span><span>
</span><span id="line-208"></span><span>
</span><span id="line-209"></span><span>        </span><span class="annot"><span class="annottext">ChildCode64 -&gt; NatM ChildCode64
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span>  </span><span class="annot"><span class="annottext">(ChildCode64 -&gt; NatM ChildCode64)
-&gt; ChildCode64 -&gt; NatM ChildCode64
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; Reg -&gt; ChildCode64
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#ChildCode64"><span class="hs-identifier hs-var">ChildCode64</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681034140"><span class="hs-identifier hs-var">code</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681034146"><span class="hs-identifier hs-var">r_dst_lo</span></a></span><span>
</span><span id="line-210"></span><span>
</span><span id="line-211"></span><span>
</span><span id="line-212"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen64.html#iselExpr64"><span class="hs-identifier hs-var">iselExpr64</span></a></span><span> </span><span id="local-6989586621681034138"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681034138"><span class="hs-identifier hs-var">expr</span></a></span></span><span>
</span><span id="line-213"></span><span>   </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; SDoc -&gt; NatM ChildCode64
forall a. HasCallStack =&gt; String -&gt; SDoc -&gt; a
</span><a href="GHC.Utils.Outputable.html#pprPanic"><span class="hs-identifier hs-var">pprPanic</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;iselExpr64(sparc)&quot;</span></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">CmmExpr -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681034138"><span class="hs-identifier hs-var">expr</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-214"></span></pre></body></html>